package framework.forms;

import org.openqa.selenium.By;

import framework.BaseForm;
import framework.elements.Label;

/**
 * Форма регистрационных данных о пользователе
 */
public class UserRegistrationDataForm extends BaseForm{

	/** Базовый конструктор.
	 */
	protected UserRegistrationDataForm() {
		super(By.xpath("//h2[contains(.,'Регистрац')]"), "Регистрационные данные пользователя");
	}

	private final String regUserItemTemplate = "//div[@id='content']//table[%s]//tr[%s]//td[2]/span";
	//Строки ифнормации о пользователе
	private final int lastname = 1;
	private final int firstname = 2;
	private final int middlename = 3;
	private final int dolzhnost = 4;
	private final int email = 5;
	private final int login = 1;
	private final int polnomochia = 2;
	//Таблицы с данными
	private final int userdata = 1;
	private final int logindata = 2;

	/**
	 * Проверяет текст в полях на форме
	 * @param items массив полей
	 * @param expected массив ожидаемых результатов
	 */
	public void assertUserRegInfo(USER_REGISTRATION_INFO[] items, String[] expected){
		for(int i = 0; i < items.length; i++){
			jassert.assertText(items[i].toString(), expected[i], getUserData(items[i]), true);
		}
	}

	/**
	 * Поля  с данными о пользователе
	 */
	public enum USER_REGISTRATION_INFO{
		LASTNAME("Фамилия"), FIRSTNAME("Имя"), MIDDLENAME("Отчетство"), DOLZHNOST("Должность"), EMAIL("Адрес электронной почты"), LOGIN("Логин"), POLNOMOCHIYA("Полномочия");

		private String	val;

		/** Устанавливает название для сущности
		 * @param name название
		 */
		USER_REGISTRATION_INFO(String name) {
			val = name;
		}

		@Override
		public String toString() {
			return val;
		}
	}

	/**
	 * Возвращает данные, которые находятся на странице, если кликнуть по Ф.И.О. текущего пользователя
	 * @param item поле, текст которого возвращается
	 * @return текст поля
	 */
	public String getUserData(USER_REGISTRATION_INFO item){
		Label l = null;
		switch(item){
			case LASTNAME:
				l = new Label(By.xpath(String.format(regUserItemTemplate, userdata, lastname)), item.toString());
				break;
			case FIRSTNAME:
				l = new Label(By.xpath(String.format(regUserItemTemplate, userdata, firstname)), item.toString());
				break;
			case MIDDLENAME:
				l = new Label(By.xpath(String.format(regUserItemTemplate, userdata, middlename)), item.toString());
				break;
			case DOLZHNOST:
				l = new Label(By.xpath(String.format(regUserItemTemplate, userdata, dolzhnost)), item.toString());
				break;
			case EMAIL:
				l = new Label(By.xpath(String.format(regUserItemTemplate, userdata, email)), item.toString());
				break;
			case LOGIN:
				l = new Label(By.xpath(String.format(regUserItemTemplate, logindata, login)), item.toString());
				break;
			case POLNOMOCHIYA:
				l = new Label(By.xpath(String.format(regUserItemTemplate, logindata, polnomochia)), item.toString());
				break;
		default:
			break;
		}
		logger.info("Поле " + item.toString() + " содержит текст: " + l.getText());
		return l.getText();
	}
}
